package testJdk.thread.testRunnable;


import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author Created by cyd on 2021-03-29 12:17:23
 * @Description : 测试关闭任务
 */
public class MyTest04 {
    public static void main(String[] args) {
        //test01();
        test02();
    }

    /**
     * 测试shutdown()方法
     */
    private static void test01() {
        // 使用工厂类获取线程池对象,线程池里面最多有3个线程
        ExecutorService es = Executors.newSingleThreadExecutor();
        for (int i = 1; i <= 10; i++) {
            es.submit(new MyRunnable4(i));
        }
        // 关闭线程池，以前提交的任务可以继续执行，但是不再接收新的任务
        es.shutdown();
        // 测试：再次提交任务
        es.submit(new MyRunnable4(888));
    }

    /**
     * 测试shutdownNow()方法
     */
    private static void test02() {
        // 使用工厂类获取线程池对象,线程池里面最多有3个线程
        ExecutorService es = Executors.newSingleThreadExecutor();
        for (int i = 1; i <= 10; i++) {
            es.submit(new MyRunnable4(i));
        }
        // 关闭线程池，在任务队列中等待的任务全部取消，并封装到list中返回
        List<Runnable> list = es.shutdownNow();
        System.out.println(list);
    }
}


class MyRunnable4 implements Runnable {
    private final int id;

    public MyRunnable4(int id) {
        this.id = id;
    }

    /**
     * 获取线程的名称，并打印一句话
     */
    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        System.out.println(name + "-执行了任务:" + id);
    }

    @Override
    public String toString() {
        return "MyRunnable4{" +
                "id=" + id +
                '}';
    }
}
